import axios from 'axios'
import { ElMessage, ElNotification } from 'element-plus'

import { router } from '@/router'

const API_URL = import.meta.env.VITE_API_BASE_URL

// console.log(API_URL)

const $http = axios.create({
  baseURL: API_URL,
  timeout: 30 * 1000,
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  },
  // 表示跨域请求时是否需要使用凭证
  withCredentials: false,
  // 服务器响应的数据类型，可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
  responseType: 'json'
})

// 请求拦截
$http.interceptors.request.use(
  (config) => {
    config.headers.Authorization = localStorage.getItem('token')
      ? `${localStorage.getItem('token')}`
      : ''
    return config
  },
  (error) => {
    return Promise.reject(error)
  }
)

// 响应拦截
$http.interceptors.response.use(
  (res) => {
    if (res.status === 200) {
      const code = res.data.code || 0
      // 根据返回的自定义code来做不同的处理
      if (code === 401) {
        ElMessage({
          type: 'warning',
          message: '登录已过期 或 未登录，请重新登录',
          duration: 2000
        })
        router.push({ path: '/login' })
      }
    } else {
      ElMessage({
        message: res.data.message,
        type: 'error',
        duration: 2000
      })
    }

    return res.data
  },
  // 请求出错
  (error) => {
    ElNotification({
      title: '请求错误',
      message: error.message,
      type: 'error',
      duration: 2000
    })
    return Promise.reject(error)
  }
)

export default $http
